'''PythonApplication1.py


Python 中确实存在类似于 Java 反射的技术，主要通过以下几种方式实现：

getattr 和 setattr: 用于动态获取或设置对象的属性。
hasattr: 检查对象是否有某个属性。
dir: 返回对象的所有属性和方法的列表。
type 和 isinstance: 用于检查对象的类型。
inspect 模块: 提供了更强大的反射功能，可以检查类、方法、函数、模块等的详细信息


'''
import inspect

class MyClass:
    def __init__(self, value):
        self.value = value

    def my_method(self):
        print(f"Value: {self.value}")

# 创建对象
obj = MyClass(10)

# 动态获取属性
print(getattr(obj, 'value'))  # 输出: 10

# 动态设置属性
setattr(obj, 'value', 20)
print(getattr(obj, 'value'))  # 输出: 20

# 检查对象是否有某个属性
print(hasattr(obj, 'value'))  # 输出: True
print(hasattr(obj, 'nonexistent'))  # 输出: False

# 获取对象的所有属性和方法
print(dir(obj))  # 输出: ['__class__', '__delattr__', ..., 'my_method', 'value']

# 检查对象的类型
print(isinstance(obj, MyClass))  # 输出: True

# 使用 inspect 模块
print(inspect.ismethod(obj.my_method))  # 输出: True
print(inspect.isfunction(obj.my_method))  # 输出: False
print(inspect.getmembers(MyClass))  # 输出: [('__class__', ...), ('__init__', <function MyClass.__init__ at 0x...>), ('my_method', <function MyClass.my_method at 0x...>)]




class SwitchClass:
    @staticmethod
    def f1():
        print('f1')
    
    @staticmethod
    def f2():
        print('f2')

    @staticmethod
    def f3():
        print('f3')

    @staticmethod
    def default():
        print('default')

def switch_case(case):
    # 定义一个字典，将字符串映射到对应的函数
    switch_dict = {
        '1': SwitchClass.f1,
        '2': SwitchClass.f2,
        '3': SwitchClass.f3
    }
    
    # 获取对应的函数，如果没有找到则返回默认函数
    func = switch_dict.get(case, SwitchClass.default)
    
    # 调用函数
    func()



# 测试
switch_case('1')  # 输出: f1
switch_case('2')  # 输出: f2
switch_case('3')  # 输出: f3
switch_case('4')  # 输出: default